package my.mybatis.common.util;


import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;

import java.io.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 生成word文档工具类
 */
public class DocUtil {
       public static Configuration configure = null;
       public DocUtil(){
              configure= new Configuration();
              configure.setDefaultEncoding("utf-8");
       }
       /**
        * 根据Doc模板生成word文件
        * @param dataMap Map 需要填入模板的数据
        * @param downloadType 模板文件名称（模板文件最好放在代码目录下）
        * @param savePath 保存路径
        */
       public static void createDoc(Map<String, Object> dataMap, String downloadType, String savePath){
              try{
                     //加载需要装填的模板
                     Template template  = null;
                     //加载模板文件
                     configure.setClassForTemplateLoading(DocUtil.class,"");
                     //设置对象包装器
                     configure.setObjectWrapper(new DefaultObjectWrapper());
                     //设置异常处理器
                     configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
                     //定义Template对象,注意模板类型名字与downloadType要一致
                     template= configure.getTemplate(downloadType);
                     //输出文档
                     File outFile = new File(savePath);
                     Writer out = null;
                     out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));                                    
                     template.process(dataMap,out);
              }catch (Exception e) {
                     e.printStackTrace();
              }
       }
       
       public static void main(String[] args) {
    	   DocUtil test = new DocUtil();
           Map<String, Object> dataMap = new HashMap<String, Object>();
           dataMap.put("value", "YMXWZF"+DateUtil.dateToStr(new Date(), "YYYYMMdd"));
    	   test.createDoc(dataMap , "退税-出口服务委托函.xml", "E:\\aa.doc");
    	}  
}